package structural.proxy.dynamic_proxy.cglib;

import net.sf.cglib.proxy.Enhancer;
import structural.proxy.dynamic_proxy.jdk.MyInvocationHandler;

import java.lang.reflect.Proxy;

/**
 * @ClassName: SubjectJDKProxy
 * @Description: 代理工厂
 * @Author: liu-hao
 * @Date: 2023-04-09 21:51
 * @Version: 1.0
 **/
public class ProxyFactory {

    /**
     * 获取动态代理的对象
     *
     * @param obj 被代理类的对象
     * @return
     */
    public static Subject getProxyInstance(Object obj) {
        // cglib工具类（Enhancer类是CGLib中的一个字节码增强器）
        Enhancer en = new Enhancer();
        // 设置父类
        en.setSuperclass(obj.getClass());
        // 设置回调函数
        en.setCallback(new MyMethodInterceptor(obj));
        // 创建子类代理对象
        return (Subject) en.create();
    }
}
